↳ Prolog
↳ PrologToPiTRSProof
samefringe_in_gg(nil, nil) → samefringe_out_gg(nil, nil)
samefringe_in_gg(cons(U, V), cons(X, Y)) → U2_gg(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
gopher_in_ga(nil, nil) → gopher_out_ga(nil, nil)
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
U2_gg(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_gg(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U3_gg(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_gg(U, V, X, Y, samefringe_in_gg(V1, Y1))
U4_gg(U, V, X, Y, samefringe_out_gg(V1, Y1)) → samefringe_out_gg(cons(U, V), cons(X, Y))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
samefringe_in_gg(nil, nil) → samefringe_out_gg(nil, nil)
samefringe_in_gg(cons(U, V), cons(X, Y)) → U2_gg(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
gopher_in_ga(nil, nil) → gopher_out_ga(nil, nil)
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
U2_gg(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_gg(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U3_gg(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_gg(U, V, X, Y, samefringe_in_gg(V1, Y1))
U4_gg(U, V, X, Y, samefringe_out_gg(V1, Y1)) → samefringe_out_gg(cons(U, V), cons(X, Y))
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → U2_GG(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → GOPHER_IN_GA(cons(U, V), cons(U1, V1))
GOPHER_IN_GA(cons(cons(U, V), W), X) → U1_GA(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
GOPHER_IN_GA(cons(cons(U, V), W), X) → GOPHER_IN_GA(cons(U, cons(V, W)), X)
U2_GG(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_GG(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U2_GG(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → GOPHER_IN_GA(cons(X, Y), cons(X1, Y1))
U3_GG(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_GG(U, V, X, Y, samefringe_in_gg(V1, Y1))
U3_GG(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN_GG(V1, Y1)
samefringe_in_gg(nil, nil) → samefringe_out_gg(nil, nil)
samefringe_in_gg(cons(U, V), cons(X, Y)) → U2_gg(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
gopher_in_ga(nil, nil) → gopher_out_ga(nil, nil)
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
U2_gg(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_gg(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U3_gg(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_gg(U, V, X, Y, samefringe_in_gg(V1, Y1))
U4_gg(U, V, X, Y, samefringe_out_gg(V1, Y1)) → samefringe_out_gg(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → U2_GG(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → GOPHER_IN_GA(cons(U, V), cons(U1, V1))
GOPHER_IN_GA(cons(cons(U, V), W), X) → U1_GA(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
GOPHER_IN_GA(cons(cons(U, V), W), X) → GOPHER_IN_GA(cons(U, cons(V, W)), X)
U2_GG(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_GG(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U2_GG(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → GOPHER_IN_GA(cons(X, Y), cons(X1, Y1))
U3_GG(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_GG(U, V, X, Y, samefringe_in_gg(V1, Y1))
U3_GG(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN_GG(V1, Y1)
samefringe_in_gg(nil, nil) → samefringe_out_gg(nil, nil)
samefringe_in_gg(cons(U, V), cons(X, Y)) → U2_gg(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
gopher_in_ga(nil, nil) → gopher_out_ga(nil, nil)
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
U2_gg(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_gg(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U3_gg(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_gg(U, V, X, Y, samefringe_in_gg(V1, Y1))
U4_gg(U, V, X, Y, samefringe_out_gg(V1, Y1)) → samefringe_out_gg(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
GOPHER_IN_GA(cons(cons(U, V), W), X) → GOPHER_IN_GA(cons(U, cons(V, W)), X)
samefringe_in_gg(nil, nil) → samefringe_out_gg(nil, nil)
samefringe_in_gg(cons(U, V), cons(X, Y)) → U2_gg(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
gopher_in_ga(nil, nil) → gopher_out_ga(nil, nil)
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
U2_gg(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_gg(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U3_gg(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_gg(U, V, X, Y, samefringe_in_gg(V1, Y1))
U4_gg(U, V, X, Y, samefringe_out_gg(V1, Y1)) → samefringe_out_gg(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
GOPHER_IN_GA(cons(cons(U, V), W), X) → GOPHER_IN_GA(cons(U, cons(V, W)), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ PiDP
GOPHER_IN_GA(cons(cons(U, V), W)) → GOPHER_IN_GA(cons(U, cons(V, W)))
GOPHER_IN_GA(cons(cons(U, V), W)) → GOPHER_IN_GA(cons(U, cons(V, W)))
POL(GOPHER_IN_GA(x1)) = 2·x1
POL(cons(x1, x2)) = 2 + 2·x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ PisEmptyProof
↳ PiDP
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U3_GG(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN_GG(V1, Y1)
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → U2_GG(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
U2_GG(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_GG(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
samefringe_in_gg(nil, nil) → samefringe_out_gg(nil, nil)
samefringe_in_gg(cons(U, V), cons(X, Y)) → U2_gg(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
gopher_in_ga(nil, nil) → gopher_out_ga(nil, nil)
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
U2_gg(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_gg(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
U3_gg(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → U4_gg(U, V, X, Y, samefringe_in_gg(V1, Y1))
U4_gg(U, V, X, Y, samefringe_out_gg(V1, Y1)) → samefringe_out_gg(cons(U, V), cons(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U3_GG(U, V, X, Y, U1, V1, gopher_out_ga(cons(X, Y), cons(X1, Y1))) → SAMEFRINGE_IN_GG(V1, Y1)
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → U2_GG(U, V, X, Y, gopher_in_ga(cons(U, V), cons(U1, V1)))
U2_GG(U, V, X, Y, gopher_out_ga(cons(U, V), cons(U1, V1))) → U3_GG(U, V, X, Y, U1, V1, gopher_in_ga(cons(X, Y), cons(X1, Y1)))
gopher_in_ga(cons(nil, Y), cons(nil, Y)) → gopher_out_ga(cons(nil, Y), cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W), X) → U1_ga(U, V, W, X, gopher_in_ga(cons(U, cons(V, W)), X))
U1_ga(U, V, W, X, gopher_out_ga(cons(U, cons(V, W)), X)) → gopher_out_ga(cons(cons(U, V), W), X)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
U3_GG(V1, gopher_out_ga(cons(X1, Y1))) → SAMEFRINGE_IN_GG(V1, Y1)
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → U2_GG(X, Y, gopher_in_ga(cons(U, V)))
U2_GG(X, Y, gopher_out_ga(cons(U1, V1))) → U3_GG(V1, gopher_in_ga(cons(X, Y)))
gopher_in_ga(cons(nil, Y)) → gopher_out_ga(cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W)) → U1_ga(gopher_in_ga(cons(U, cons(V, W))))
U1_ga(gopher_out_ga(X)) → gopher_out_ga(X)
gopher_in_ga(x0)
U1_ga(x0)
gopher_in_ga(cons(nil, Y)) → gopher_out_ga(cons(nil, Y))
gopher_in_ga(cons(cons(U, V), W)) → U1_ga(gopher_in_ga(cons(U, cons(V, W))))
POL(SAMEFRINGE_IN_GG(x1, x2)) = 1 + x1 + x2
POL(U1_ga(x1)) = x1
POL(U2_GG(x1, x2, x3)) = 1 + 2·x1 + x2 + x3
POL(U3_GG(x1, x2)) = x1 + x2
POL(cons(x1, x2)) = 1 + 2·x1 + x2
POL(gopher_in_ga(x1)) = 1 + x1
POL(gopher_out_ga(x1)) = x1
POL(nil) = 0
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
U3_GG(V1, gopher_out_ga(cons(X1, Y1))) → SAMEFRINGE_IN_GG(V1, Y1)
SAMEFRINGE_IN_GG(cons(U, V), cons(X, Y)) → U2_GG(X, Y, gopher_in_ga(cons(U, V)))
U2_GG(X, Y, gopher_out_ga(cons(U1, V1))) → U3_GG(V1, gopher_in_ga(cons(X, Y)))
U1_ga(gopher_out_ga(X)) → gopher_out_ga(X)
gopher_in_ga(x0)
U1_ga(x0)